home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / UTILITY1 / MSWLGO35.ZIP / EXAMPLES / DOCSETUP < prev    next >
Text File  |  1993-04-12  |  23KB  |  723 lines

  1. ;
  2. ; Function:
  3. ;
  4. ; Simulated Intelligent Doctor
  5. ;
  6. ; To run:
  7. ;
  8. ; Load "doctor
  9. ; Call SETUP
  10. ; Call DOCTOR
  11. ;
  12. TO MATCH!
  13. IF EMPTYP :SEN [OP "FALSE]
  14. IF NOT TRY.PRED [OP "FALSE]
  15. MAKE :SPECIAL.VAR FIRST :SEN
  16. OP MATCH BF :PAT BF :SEN
  17. END
  18.  
  19. TO MATCH#
  20. MAKE :SPECIAL.VAR []
  21. OP #TEST #GATHER :SEN
  22. END
  23.  
  24. TO #GATHER :SEN
  25. IF EMPTYP :SEN [OP :SEN]
  26. IF NOT TRY.PRED [OP :SEN]
  27. MAKE :SPECIAL.VAR LPUT FIRST :SEN THING :SPECIAL.VAR
  28. OP #GATHER BF :SEN
  29. END
  30.  
  31. TO #TEST :SEN
  32. IF MATCH BF :PAT :SEN [OP "TRUE]
  33. IF EMPTYP THING :SPECIAL.VAR [OP "FALSE]
  34. OP #TEST2 FPUT LAST THING :SPECIAL.VAR :SEN
  35. END
  36.  
  37. TO #TEST2 :SEN
  38. MAKE :SPECIAL.VAR BL THING :SPECIAL.VAR
  39. OP #TEST :SEN
  40. END
  41.  
  42. TO MATCH&
  43. OP &TEST MATCH#
  44. END
  45.  
  46. TO &TEST :TF
  47. IF EMPTYP THING :SPECIAL.VAR [OP "FALSE]
  48. OP :TF
  49. END
  50.  
  51. TO MATCH?
  52. MAKE :SPECIAL.VAR []
  53. IF EMPTYP :SEN [OP MATCH BF :PAT :SEN]
  54. IF NOT TRY.PRED [OP MATCH BF :PAT :SEN]
  55. MAKE :SPECIAL.VAR FIRST :SEN
  56. IF MATCH BF :PAT BF :SEN [OP "TRUE]
  57. MAKE :SPECIAL.VAR []
  58. OP MATCH BF :PAT :SEN
  59. END
  60.  
  61. TO MATCH@
  62. MAKE :SPECIAL.VAR :SEN
  63. OP @TEST []
  64. END
  65.  
  66. TO @TEST :SEN
  67. IF @TRY.PRED [IF MATCH BF :PAT :SEN [OP "TRUE]]
  68. IF EMPTYP THING :SPECIAL.VAR [OP "FALSE]
  69. OP @TEST2 FPUT LAST THING :SPECIAL.VAR :SEN
  70. END
  71.  
  72. TO @TEST2 :SEN
  73. MAKE :SPECIAL.VAR BL THING :SPECIAL.VAR
  74. OP @TEST :SEN
  75. END
  76.  
  77. TO @TRY.PRED
  78. IF LISTP :SPECIAL.PRED [OP MATCH :SPECIAL.PRED THING :SPECIAL.VAR]
  79. OP RUN LIST :SPECIAL.PRED THING :SPECIAL.VAR
  80. END
  81.  
  82. TO ADDMEMR :WORD :PATTERN :RESULTS
  83. LOCAL "PROPNAME
  84. MAKE "PROPNAME GENSYM
  85. PPROP :WORD "MEMR ( SE GPROP :WORD "MEMR LIST :PATTERN :PROPNAME )
  86. PPROP :WORD :PROPNAME :RESULTS
  87. END
  88.  
  89. TO ADDPUNCT :STUFF :CHAR
  90. IF WORDP :STUFF [OUTPUT WORD :STUFF :CHAR]
  91. IF EMPTYP :STUFF [OUTPUT :CHAR]
  92. OUTPUT SE BL :STUFF WORD LAST :STUFF :CHAR
  93. END
  94.  
  95. TO ADDRULE :WORD :PATTERN :RESULTS
  96. LOCAL "PROPNAME
  97. MAKE "PROPNAME GENSYM
  98. PPROP :WORD "RULES ( SE GPROP :WORD "RULES LIST :PATTERN :PROPNAME )
  99. PPROP :WORD :PROPNAME :RESULTS
  100. END
  101.  
  102. TO ALWAYS :X
  103. OP "TRUE
  104. END
  105.  
  106. TO ANALYZE :SENTENCE :KEYWORDS
  107. LOCAL [RULES KEYWORD]
  108. IF EMPTYP :KEYWORDS [NORULES STOP]
  109. MAKE "KEYWORD FIRST :KEYWORDS
  110. MAKE "RULES GPROP :KEYWORD "RULES
  111. IF WORDP FIRST :RULES ~
  112.    [MAKE "KEYWORD FIRST :RULES MAKE "RULES GPROP :KEYWORD "RULES]
  113. CHECKRULES :KEYWORD :RULES
  114. END
  115.  
  116. TO ANYOF :SEN
  117. OP ANYOF1 :SEN :IN.LIST
  118. END
  119.  
  120. TO ANYOF1 :SEN :PATS
  121. IF EMPTYP :PATS [OP "FALSE]
  122. IF MATCH FIRST :PATS :SEN [OP "TRUE]
  123. OP ANYOF1 :SEN BF :PATS
  124. END
  125.  
  126. TO BELIEFP :WORD
  127. OUTPUT NOT EMPTYP GPROP :WORD "BELIEF
  128. END
  129.  
  130. TO CHECKPRIORITY :WORD
  131. LOCAL "PRIORITY
  132. MAKE "PRIORITY GPROP :WORD "PRIORITY
  133. IF EMPTYP :PRIORITY [STOP]
  134. IF EMPTYP :KEYWORDS [MAKE "KEYWORDS ( LIST :WORD ) STOP]
  135. IFELSE :PRIORITY > ( GPROP FIRST :KEYWORDS "PRIORITY ) ~
  136.        [MAKE "KEYWORDS FPUT :WORD :KEYWORDS] ~
  137.        [MAKE "KEYWORDS LPUT :WORD :KEYWORDS]
  138. END
  139.  
  140. TO CHECKRULES :KEYWORD :RULES
  141. IF NOT MATCH FIRST :RULES :SENTENCE ~
  142.    [CHECKRULES :KEYWORD BF BF :RULES STOP]
  143. DORULE FIRST BF :RULES
  144. END
  145.  
  146. TO DOCTOR
  147. LOCAL [TEXT SENTENCE STUFF A B C RULES KEYWORDS]
  148. MAKE "MEMORY []
  149. PR [HELLO, I AM THE DOCTOR. WHAT CAN I DO FOR YOU?]
  150. PR [PLEASE END YOUR REMARKS WITH AN EMPTY LINE.]
  151. PR []
  152. LOOP
  153. END
  154.  
  155. TO DORULE :RULE
  156. LOCAL "PRINT
  157. MAKE "PRINT FIRST GPROP :KEYWORD :RULE
  158. PPROP :KEYWORD :RULE LPUT :PRINT BF GPROP :KEYWORD :RULE
  159. IF EQUALP :PRINT "NEWKEY [ANALYZE :SENTENCE BF :KEYWORDS STOP]
  160. IF WORDP :PRINT [CHECKRULES :PRINT GPROP :PRINT "RULES STOP]
  161. IF EQUALP FIRST :PRINT "PRE ~
  162.    [ANALYZE RECONSTRUCT FIRST BF :PRINT BF BF :PRINT STOP]
  163. PRINT RECONSTRUCT :PRINT
  164. MEMORY :KEYWORD :SENTENCE
  165. END
  166.  
  167. TO FAMILYP :WORD
  168. OUTPUT NOT EMPTYP GPROP :WORD "FAMILY
  169. END
  170.  
  171. TO GETSENTENCE :TEXT
  172. MAKE "KEYWORDS []
  173. OUTPUT GETSENTENCE1 :TEXT []
  174. END
  175.  
  176. TO GETSENTENCE1 :TEXT :OUT
  177. IF EMPTYP :TEXT [OUTPUT :OUT]
  178. IF EQUALP FIRST :TEXT ". ~
  179.    [IFELSE EMPTYP :KEYWORDS ~
  180.            [OUTPUT GETSENTENCE1 BF :TEXT []] [OUTPUT :OUT]]
  181. CHECKPRIORITY FIRST :TEXT
  182. OUTPUT GETSENTENCE1 BF :TEXT SE :OUT TRANSLATE FIRST :TEXT
  183. END
  184.  
  185. TO GETSTUFF :STUFF
  186. LOCAL "LINE
  187. MAKE "LINE RL
  188. IF EMPTYP :LINE [OP :STUFF]
  189. OP GETSTUFF SE :STUFF :LINE
  190. END
  191.  
  192. TO IN :WORD
  193. OP MEMBERP :WORD :IN.LIST
  194. END
  195.  
  196. TO LASTRESORT
  197. PRINT FIRST :LASTRESORT
  198. MAKE "LASTRESORT LPUT FIRST :LASTRESORT BF :LASTRESORT
  199. END
  200.  
  201. TO LOOP
  202. MAKE "TEXT TOKENIZE GETSTUFF []
  203. MAKE "SENTENCE GETSENTENCE :TEXT
  204. ANALYZE :SENTENCE :KEYWORDS
  205. PRINT []
  206. LOOP
  207. END
  208.  
  209. TO MATCH :PAT :SEN
  210. LOCAL [SPECIAL.VAR SPECIAL.PRED SPECIAL.BUFFER IN.LIST]
  211. IF OR WORDP :PAT WORDP :SEN [OP "FALSE]
  212. IF EMPTYP :PAT [OP EMPTYP :SEN]
  213. IF LISTP FIRST :PAT [OP SPECIAL FPUT "!: :PAT :SEN]
  214. IF MEMBERP FIRST FIRST :PAT [? # ! & @] [OP SPECIAL :PAT :SEN]
  215. IF EMPTYP :SEN [OP "FALSE]
  216. IF EQUALP FIRST :PAT FIRST :SEN [OP MATCH BF :PAT BF :SEN]
  217. OP "FALSE
  218. END
  219.  
  220. TO MEMORY :KEYWORD :SENTENCE
  221. LOCAL [RULES RULE NAME]
  222. MAKE "RULES GPROP :KEYWORD "MEMR
  223. IF EMPTYP :RULES [STOP]
  224. IF NOT MATCH FIRST :RULES :SENTENCE [STOP]
  225. MAKE "NAME LAST :RULES
  226. MAKE "RULES GPROP :KEYWORD :NAME
  227. MAKE "RULE FIRST :RULES
  228. PPROP :KEYWORD :NAME LPUT :RULE BF :RULES
  229. MAKE "MEMORY FPUT RECONSTRUCT :SENTENCE :MEMORY
  230. END
  231.  
  232. TO NORULES
  233. IFELSE :MEMFLAG [USEMEMORY] [LASTRESORT]
  234. MAKE "MEMFLAG NOT :MEMFLAG
  235. END
  236.  
  237. TO PARSE.SPECIAL :WORD :VAR
  238. IF EMPTYP :WORD [OP LIST :VAR "ALWAYS]
  239. IF EQUALP FIRST :WORD ": [OP LIST :VAR BF :WORD]
  240. OP PARSE.SPECIAL BF :WORD WORD :VAR FIRST :WORD
  241. END
  242.  
  243. TO QUOTED :THING
  244. IF LISTP :THING [OP :THING]
  245. OP WORD "" :THING
  246. END
  247.  
  248. TO RECONSTRUCT :SENTENCE
  249. IF EMPTYP :SENTENCE [OUTPUT []]
  250. IF NOT EQUALP ": FIRST FIRST :SENTENCE ~
  251.    [OUTPUT FPUT FIRST :SENTENCE RECONSTRUCT BF :SENTENCE]
  252. OUTPUT SE REWORD FIRST :SENTENCE RECONSTRUCT BF :SENTENCE
  253. END
  254.  
  255. TO REWORD :WORD
  256. IF MEMBERP LAST :WORD [. ? ,] [OUTPUT ADDPUNCT REWORD BL :WORD LAST :WORD]
  257. OUTPUT THING BF :WORD
  258. END
  259.  
  260. TO SET.IN
  261. MAKE "IN.LIST FIRST BF :PAT
  262. MAKE "PAT FPUT FIRST :PAT BF BF :PAT
  263. END
  264.  
  265. TO SET.SPECIAL :LIST
  266. MAKE "SPECIAL.VAR FIRST :LIST
  267. MAKE "SPECIAL.PRED LAST :LIST
  268. IF EMPTYP :SPECIAL.VAR [MAKE "SPECIAL.VAR "SPECIAL.BUFFER]
  269. IF MEMBERP :SPECIAL.PRED [IN ANYOF] [SET.IN]
  270. IF NOT EMPTYP :SPECIAL.PRED [STOP]
  271. MAKE "SPECIAL.PRED FIRST BF :PAT
  272. MAKE "PAT FPUT FIRST :PAT BF BF :PAT
  273. END
  274.  
  275. TO SETUP
  276. MAKE "MEMFLAG "FALSE
  277. MAKE "LASTRESORT [[I AM NOT SURE I UNDERSTAND YOU FULLY.] ~
  278.   [PLEASE GO ON.] ~
  279.   [WHAT DOES THAT SUGGEST TO YOU?] ~
  280.   [DO YOU FEEL STRONGLY ABOUT DISCUSSING SUCH THINGS?]]
  281. SETUP1
  282. SETUP2
  283. SETUP3
  284. SETUP4
  285. ERASE [SETUP1 SETUP2 SETUP3 SETUP4 ADDRULE ADDMEMR SETUP]
  286. END
  287.  
  288. TO SETUP1
  289. PPROP "SORRY "PRIORITY 0
  290. ADDRULE "SORRY [#] ~
  291.   [[PLEASE DON'T APOLOGIZE.] ~
  292.    [APOLOGIES ARE NOT NECESSARY.] ~
  293.    [WHAT FEELINGS DO YOU HAVE WHEN YOU APOLOGIZE?] ~
  294.    [I'VE TOLD YOU THAT APOLOGIES ARE NOT REQUIRED.]]
  295. PPROP "DONT "TRANSLATION "DON'T
  296. PPROP "CANT "TRANSLATION "CAN'T
  297. PPROP "WONT "TRANSLATION "WON'T
  298. PPROP "REMEMBER "PRIORITY 5
  299. ADDRULE "REMEMBER ~
  300.   [# YOU REMEMBER #STUFF] ~
  301.   [[DO YOU OFTEN THINK OF :STUFF?] ~
  302.    [DOES THINKING OF :STUFF BRING ANYTHING ELSE TO MIND?] ~
  303.    [WHAT ELSE DO YOU REMEMBER?] ~
  304.    [WHY DO YOU REMEMBER :STUFF JUST NOW?] ~
  305.    [WHAT IN THE PRESENT SITUATION REMINDS YOU OF :STUFF?]]
  306. ADDRULE "REMEMBER [# DO I REMEMBER #STUFF] ~
  307.   [[DID YOU THINK I WOULD FORGET :STUFF?] ~
  308.    [WHY DO YOU THINK I SHOULD RECALL :STUFF NOW?] ~
  309.    [WHAT ABOUT :STUFF?] WHAT [YOU MENTIONED :STUFF.]]
  310. ADDRULE "REMEMBER [#] [NEWKEY]
  311. PPROP "IF "PRIORITY 3
  312. ADDRULE "IF [#A IF #B HAD #C] [[PRE [:A IF :B MIGHT HAVE :C] IF]]
  313. ADDRULE "IF [# IF #STUFF] ~
  314.   [[DO YOU THINK IT'S LIKELY THAT :STUFF?] ~
  315.    [DO YOU WISH THAT :STUFF?] ~
  316.    [WHAT DO YOU THINK ABOUT :STUFF?]]
  317. PPROP "DREAMED "PRIORITY 4
  318. ADDRULE "DREAMED [# YOU DREAMED #STUFF] ~
  319.   [[REALLY :STUFF?] ~
  320.    [HAVE YOU EVER FANTASIED :STUFF WHILE YOU WERE AWAKE?] ~
  321.    [HAVE YOU DREAMED :STUFF BEFORE?] DREAM NEWKEY]
  322. ADDRULE "DREAMED [#] [DREAM NEWKEY]
  323. PPROP "DREAMT "TRANSLATION "DREAMED
  324. PPROP "DREAMT "PRIORITY 4
  325. PPROP "DREAMT "RULES [DREAMED]
  326. PPROP "DREAM "PRIORITY 3
  327. ADDRULE "DREAM [#] ~
  328.   [[WHAT DOES THAT DREAM SUGGEST TO YOU?] ~
  329.    [DO YOU DREAM OFTEN?] ~
  330.    [WHAT PERSONS APPEAR IN YOUR DREAMS?] ~
  331.    [DON'T YOU BELIEVE THAT DREAM HAS SOMETHING TO DO WITH YOUR PROBLE